一篇文章学会Redis 您所在的位置:网站首页 java redis缓存查询缓存是否存在 一篇文章学会Redis

一篇文章学会Redis

2024-06-10 00:06| 来源: 网络整理| 查看: 265

我们常学的数据库是MySQl,Redis,Oracle 其中MySQl,Oracle是关系型数据库,而Redis是就是NoSQl(Not Only SQl),意味“不仅仅是SQL",是一项全新的数据库理念,泛指非关系型的数据库。而Redis就是非关系型数据库

关系型数据库与非关系型数据库的区别

1) 关系型数据库特点(Mysql Oracle SqlServer)

数据是由一张张的表组成,而且这些表与表之间有关系(一对一,一对多,多对多)数据是存在硬盘上,每次访问时,是将数据从硬盘读取到内存中 在这里插入图片描述

2)非关系型数据库(NOSQL)特点 (Redis )

数据是有一个个的键值对:键 值 键 值数据是存在内存中,在满足需要的时候,也可以将数据存在硬盘上(Redis的持久化) 为什么需要NOSQL? (1) 所有的关系型数据库,都有三高问题 高并发 1秒内访问量高效率 读写速度高扩展 不能随意修改表

NOSQL数据库(Redis)可以全部解决三高问题 (2)案例:12306

Redis的介绍

(1)什么是Redis? Redis(Remote Dictionary Server ) 远程字典服务,是一个非关系型数据库,非关系型数据库被称为NOSQL数据库 (2)Redis有什么用? 有了redis是否可以不使用Mysql,Oralce? Redis一般用来存储经常访问的,但有不经常改变的数据 在这里插入图片描述

在这里插入图片描述

》》1:查询redis,没有json数据,就调用CategoryDao,去获取集合List 先返回给CategorySrvice,再转成json存进redis 》》2:第二次起,直接获取redis中的json,将json转成List

Redis数据类型

(1)Redis与Map类比 Redis是以键和值的形式存储数据 Redis可以理解成Map集合 1:键:都是字符串 2:值:有五种数据类型 字符串 json串 字符串(String)!!! 键----值 Map 哈希(hash) 大键—小键–值 Map 字符串列表(list) 键----值1,值2,值3 Map 字符串集合(set) 键----值1,值2,值3 Map 有序字符串集合(sorted set) 键----值1,值2,值3 Map 在这里插入图片描述

Redis的指令-字符串类型***

(1)字符串类型string (2)指令

set name baoqiang //添加一个键值对 如果键存在,则修改 set() get name //根据键获取值 del name //根据键删除键值对 mget name age //根据多个键查看值 Redis的指令-Hash类型

(1)哈希(hash)

hset myhash username haohao //添加数据 hset 北京 111 冰冰 hget myhash username //根据大键和小键获取值 hdel myhash username //根据大键和小键删除值

Redis的指令-Hash类型 (1)哈希(hash)

hset myhash username haohao //添加数据 hset 北京 111 冰冰 hget myhash username //根据大键和小键获取值 hdel myhash username //根据大键和小键删除值

Redis的指令-列表类型List (1)列表类型list 这里的值可以重复 栈:先进后出 (2)指令

lpush mylist a b c //压栈 添加数据,键为mylist 值为:a b c lpop mylist //从左边弹栈 删除操作,删除的顺序和添加的顺序相反 rpop mylist //从右边弹栈 Redis的指令-集合类型set

(1)集合类型set 这里的值不能重复

sadd myset a b c //添加数据 smembers myset //获取数据 srem myset a b //删除数据 Redis的指令-通用指令

(1)Redis通用指令 所有的数据类型都可以使用的指令

keys * //查看Redis中所有的键 del myset //删除指定的键值对 exists key //判断键是否存在 0表示不存在, 1表示存在 type myset //测试你的键是什么类型 Redis案例实操 (1) 编写CategoryServiceTest

test\java\com\wzx\pack01\TestCategoryService.java

//第一步:测试开发CategoryService public class TestCategoryService { @Test public void test01() throws Exception { //0: 创建业务类对象 CategoryService categoryService = new CategoryService(); //1: 查询分类集合 List list = categoryService.queryAll(); for(Category category:list){ System.out.println(category); } } } (2)编写javaBean与CategoryDao

src\com\qst\bean\Category.java

在这里插入代码片public class Category { private String name; private int id;

src\com\qst\Dao\CategoryDao.java

public class CategoryDao { public List findAll() { List list=new ArrayList(); for(int i=0;i CategoryDao dao = new CategoryDao(); ObjectMapper objectMapper = new ObjectMapper(); public List queryList() throws IOException { Jedis redis = JedisUtils.getRedis(); //缓存 String json = redis.get("list"); if(json==null){ List list=new ArrayList(); list=dao.findAll(); String jsonValue=objectMapper.writeValueAsString(list); redis.set("list",jsonValue); return list; }else{ List list=objectMapper.readValue(json,new TypeReference(){});//将json转成对象 参1 json数据 参2 return list; } } } (4)解决Servlet显示分类列表

src\com\qst\servlet\Servlet01.java

@WebServlet("/servlet01") public class Servlet01 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { CategoryService categoryService = new CategoryService(); //1: 查询分类集合 List list = categoryService.queryList(); request.setAttribute("list",list); request.getRequestDispatcher("list.jsp").forward(request,response); } } (5)JedisUtils

src\com\qst\utils\JedisUtils.java

public class JedisUtils { private static JedisPool pool; static {//静态代码在项目中,如果被使用只会加载一次 InputStream inputStream= JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties"); Properties properties = new Properties(); try { properties.load(inputStream);//将流中的数据读成map } catch (IOException e) { e.printStackTrace(); } // 1:创建连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大链接数 config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal"))); //设置空闲连接数 "3" config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle"))); //2:创建连接池 pool = new JedisPool(config, properties.getProperty("url"), Integer.parseInt(properties.getProperty("port"))); } public static Jedis getRedis() { // 3:从连接池中获取一个连接 Jedis jedis = pool.getResource();//获取一个连接 return jedis; } //3:提供释放资源的方法 public static void close(Jedis jedis){ if(jedis != null) { jedis.close(); } } } (6)list.jsp Title ${item.name} (7)其他

Lib 在这里插入图片描述

jedis.properties maxTotal=30 maxIdle=10 url=localhost port=6379


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有